import java.util.ArrayList;
import java.util.Scanner;

public class Teste {

	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int numFormigas;
		int iteracoes;
		int repeticoes;

		Problema p = new Problema();
		ArrayList<Problema> pbs = p.lerTSP();
		
	//	System.out.print("Numero de formigas: ");
		numFormigas = 20; //sc.nextInt();
	//	System.out.print("Numero de iterações: ");
		iteracoes = 100;//sc.nextInt();
	//	System.out.print("Numero de repetições: ");
		repeticoes = 1;//sc.nextInt();
		int cont = 0;
		double time = System.currentTimeMillis();
		for(Problema pb:pbs){
			cont++;
			System.out.println("Resolvendo " + pb.getNome() + ": " + cont + " de " + pbs.size());
			Grafo g = new Grafo(pb.getCds(), pb.calcularDistancias(), pb);
			/*Visualizacao v = new Visualizacao(pb);
			v.desenhaProblema();*/
		
			for(int i = 0; i < repeticoes; i++)
	        {
	            g.resetaAtracao();
	            
	            Colonia c = new Colonia(g, numFormigas, iteracoes);
	            c.start();     
	            System.out.println((pb.getNome() +": " + c.getValorMelhorRota() + ", " + c.getMelhorIteracao()));
	        }
		}
		double tempo = System.currentTimeMillis() - time;
		System.out.println("ms: " + tempo);
		System.out.println("s: " + tempo/1000);
		System.out.println("m: " + (tempo/1000)/60);
		Visualizacao v = new Visualizacao(new Problema(pbs.get(0).getNome(), Formiga.MELHOR_ROTA_GLOBAL));
    	v.desenhaProblema();

	}
}
